package com.qf.userfull.dict;


import java.util.Random;
import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        // 1. 写一个方法，生成随机字符串。
//        String word = Utils.createEnOrCnWord();
//        System.out.println(word);

        // 2. 写一个方法，生成10万个随机Word对象（使用随机字符串即可），返回Word数组
//        Word[] words = Utils.millionWord();
//        Utils.printInfo(words);

        long start = System.currentTimeMillis();
        // 3. 写一个英文字典的实现类（使用Hash表的方式进行实现，链表解决hash下标冲突
        Dictionary dictionary01 = createDictionary(100000);
        long end01 = System.currentTimeMillis();
        // 4. 写一个英文字典的实现类（使用普通数组方式进行实现）
        Dictionary dictionary02 = createCommonDictionary(100000);
        long end02 = System.currentTimeMillis();

        System.out.println("使用哈希函数的字典生成时间:" + (end01 - start));
        System.out.println("普通字典的生成时间:" + (end02 - end01));
        System.out.println("==================");
        indexDictionary(dictionary01, 100000);
        long end11 = System.currentTimeMillis();
        indexDictionary(dictionary02, 10000);
        long end22 = System.currentTimeMillis();

        System.out.println("使用哈希函数的字典查询时间:" + (end11 - end02));
        System.out.println("普通字典的查询时间" + (end22 - end11));


    }

    /**
     * 查询任意次数单词
     *
     * @param dictionary 放入字典
     * @param count      查询次数
     */
    public static void indexDictionary(Dictionary dictionary, int count) {
        for (int i = 0; i < count; i++) {
            // 随机一个英文单词
            String indexEnWord = Utils.createEnOrCnWord();
            // 查找该单词的汉语意思
            String word = dictionary.findWord(indexEnWord);
        }
    }

    /**
     * 查找一次单词
     *
     * @param dictionary
     * @return 返回查找的单词
     */
    public static String indexDictionary(Dictionary dictionary) {
        // 随机一个英文单词
        String indexEnWord = Utils.createEnOrCnWord();
        // 查找该单词的汉语意思
        String word = dictionary.findWord(indexEnWord);

        return word;
    }

    /**
     * 生成一个字典
     *
     * @param wordNumber
     * @return 返回字典
     */
    public static Dictionary createDictionary(int wordNumber) {
        Dictionary dictionary = new DictionaryImpl();
        for (int i = 0; i < wordNumber; i++) {
            dictionary.addWord(Utils.createEnOrCnWord(), Utils.createEnOrCnWord());
        }
        System.out.println("生成完毕");

        return dictionary;
    }

    /**
     * 生成一个普通数组
     *
     * @param wordNumber
     * @return 返回字典
     */
    public static Dictionary createCommonDictionary(int wordNumber) {
        Dictionary dictionary = new DictionaryImpl02();
        for (int i = 0; i < wordNumber; i++) {
            dictionary.addWord(Utils.createEnOrCnWord(), Utils.createEnOrCnWord());
        }
        System.out.println("生成完毕");

        return dictionary;
    }


}
